package com.java.day10;

public class StringDemo {
    /**
     * 介绍String类
     * 面试题：String类中的方法 intern的作用是什么（工作原理是什么？）
     * String s1 = "hello";
     * String s2 = s1.intern();
     * (1) 从"字符串常量池"中寻找是否已经存在相同的字符串对象 ;
     * "字符串常量池"相当于一个字符串的数组，在jvm内存中。
     * 寻找是否已经存在 "hello" 字符串对象
     * (2) 如果存在，则直接返回常量池中的这个字符串对象。
     * (3) 如果不存在，则先把这个字符串对象添加到常量池中，然后在返回这个字符串对象
     *
     * 注意：最常使用的String的赋值方式底层的逻辑是什么？
     * String s1 = "hello";
     * jvm在执行上面的代码时，相当于调用了 "hello".intern()方法
     */

    public static void main(String[] args) {
        String s1 = "hello";
        //如果不存在，则先把这个字符串对象添加到常量池中，然后在返回这个字符串对象
        String s2 = s1.intern();
        System.out.println(s1==s2);

        String s3 = new String("hello");// 对象的创建过程（内存视角）
        System.out.println(s1==s3);

        String s4 = new String("hello");
        System.out.println(s3==s4);

        String s5 = "hello";
        System.out.println(s1==s5);

        String s6 = "hello";
        String s7 = "hello";
        System.out.println(s6==s7);

        System.out.println(s6.hashCode());
        System.out.println(s7.hashCode());
        System.out.println(s3.hashCode());

    }

}
